package modelo;

import interfaz.IEntidad;

import java.util.List;

import javax.swing.table.AbstractTableModel;

import manejador.ManejadorDeEstudiante;

import entidad.Estudiante;

public class ModeloEstudiante extends AbstractTableModel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String[] encabezados = null;
	private List<IEntidad> estudiantes = null;
	private static ModeloEstudiante instancia = null;
	private Estudiante estudiante = null;
	private ManejadorDeEstudiante manejadorDeEstudiante = null;
	private String parametro = "ACTIVO";

	private ModeloEstudiante() {
		encabezados = new String[] { "ID Estudiante", "Nombre", "Apellido",
				"Telefono", "Sexo", "Direccion", "Nombre Tutor",
				"Apellido Tutor", "Telefono Tutor", "Estatus" };
		manejadorDeEstudiante = ManejadorDeEstudiante.getInstancia();
		estudiantes = manejadorDeEstudiante.getEntidadDinamica(this
				.getParametro());

	}

	public static ModeloEstudiante getInstancia() {
		if (instancia == null) {
			instancia = new ModeloEstudiante();
		}
		return instancia;
	}

	public String getColumnName(int indice) {
		return encabezados[indice];
	}

	@Override
	public int getColumnCount() {

		return encabezados.length;
	}

	@Override
	public int getRowCount() {
		return estudiantes.size();
	}

	public IEntidad getEntidadPorId(int id) {
		return manejadorDeEstudiante.getEntidadPorId(id);
	}

	@Override
	public Object getValueAt(int fila, int columna) {
		String retorno = "";
		estudiante = (Estudiante) manejadorDeEstudiante.getEntidadDinamica(
				this.getParametro()).get(fila);
		switch (columna) {
		case 0:
			retorno = String.valueOf(estudiante.getIdEstudiante());
			break;
		case 1:
			retorno = estudiante.getNombre();
			break;
		case 2:
			retorno = estudiante.getApellido();
			break;
		case 3:
			retorno = estudiante.getTelefono();
			break;

		case 4:
			retorno = estudiante.getSexo();
			break;
		case 5:
			retorno = estudiante.getDireccion();
			break;
		case 6:
			retorno = estudiante.getNombreTutor();
			break;
		case 7:
			retorno = estudiante.getApellidoTutor();
			break;
		case 8:
			retorno = estudiante.getTelefonoTutor();
			break;
		case 9:
			retorno = estudiante.getEstatus();
			break;

		}
		return retorno;
	}

	public void agregar(Estudiante estudiante) {
		manejadorDeEstudiante.agregar(estudiante);
		estudiantes = manejadorDeEstudiante.getEntidadDinamica(this
				.getParametro());
		fireTableDataChanged();
	}
	
	public void agregarConEmail(Estudiante estudiante) {
		manejadorDeEstudiante.agregarConEmail(estudiante);
		estudiantes = manejadorDeEstudiante.getEntidadDinamica(this
				.getParametro());
		fireTableDataChanged();
	}

	public void modificar(IEntidad entidad, int id) {
		manejadorDeEstudiante.modificar(entidad, id);
		estudiantes = manejadorDeEstudiante.getEntidadDinamica(this
				.getParametro());
		fireTableDataChanged();
	}

	public void eliminar(int fila) {
		estudiantes = manejadorDeEstudiante.getEntidadDinamica(this
				.getParametro());
		fireTableRowsDeleted(fila, fila);
	}

	public void actualizarTableParametros(String parametro) {
		this.setParametro(parametro);
		estudiantes = manejadorDeEstudiante.getEntidadDinamica(this
				.getParametro());
		fireTableDataChanged();
	}

	public void cambiarEstatus(int id) {
		manejadorDeEstudiante.cambiarEstatus(id);
		estudiantes = manejadorDeEstudiante.getEntidadDinamica(this
				.getParametro());
		fireTableDataChanged();
	}

	public String getParametro() {
		return parametro;
	}

	public void setParametro(String parametro) {
		this.parametro = parametro;
	}
}
